// 将以下数组转为树形结构

const arr = [
    {
        "id": "02",
        "name": "小亮",
        "pid": "01",
        "job": "产品leader"
    },
    {
        "id": "01",
        "name": "张大大",
        "pid": "",
        "job": "项目经理"
    },
    {
        "id": "03",
        "name": "小美",
        "pid": "01",
        "job": "UIleader"
    },
    {
        "id": "04",
        "name": "老马",
        "pid": "01",
        "job": "技术leader"
    },
    {
        "id": "05",
        "name": "老王",
        "pid": "01",
        "job": "测试leader"
    },
    {
        "id": "06",
        "name": "老李",
        "pid": "01",
        "job": "运维leader"
    },
    {
        "id": "07",
        "name": "小丽",
        "pid": "02",
        "job": "产品经理"
    },
    {
        "id": "08",
        "name": "大光",
        "pid": "02",
        "job": "产品经理"
    },
    {
        "id": "09",
        "name": "小高",
        "pid": "03",
        "job": "UI设计师"
    },
    {
        "id": "10",
        "name": "小刘",
        "pid": "04",
        "job": "前端工程师"
    },
    {
        "id": "11",
        "name": "小华",
        "pid": "04",
        "job": "后端工程师"
    },
    {
        "id": "12",
        "name": "小李",
        "pid": "04",
        "job": "后端工程师"
    },
    {
        "id": "13",
        "name": "小赵",
        "pid": "05",
        "job": "测试工程师"
    },
    {
        "id": "14",
        "name": "小强",
        "pid": "05",
        "job": "测试工程师"
    },
    {
        "id": "15",
        "name": "小涛",
        "pid": "06",
        "job": "运维工程师"
    }
]

// 伪代码
/*
 分析：
 1. pid为其父节点
 2. 为了避免第一个节点不是根节点的情况，可以先遍历一遍数组的pid，和id进行比对
 3. 比对出如果有id没有被pid匹配到，那么该id是根节点
 4. 新建一个数组
 5. 复制原数组并给每一个数组元素添加"children":[]键值对
 6. 
*/
console.time()

function treeing(arr) {
    let tree = []
    const map = new Map()
    for (let item of arr) {
        map.set(item.id, {
            ...item,
            children: []
        })
    }
    for (let item of arr) {
        if (map.has(item.pid)) {
            map.get(item.pid).children.push(map.get(item.id))
        } else {
            tree.push(map.get(item.id))
        }
    }
    return tree
}

console.log(treeing(arr));
console.log(111);
console.timeEnd()